describe('书籍评论和点赞测试', () => {
  // 测试用户信息
  const TEST_USER = {
    username: 'user',
    password: '111111'
  }

  beforeEach(() => {
    // 清除 cookies
    cy.clearCookies()
    
    // 访问登录页面
    cy.visit('/user/login')
    // 等待页面加载完成
    cy.contains('书籍分享平台-用户').should('be.visible')
    
    // 执行登录
    cy.get('.el-input input[placeholder="用户名"]').should('be.visible').type(TEST_USER.username)
    cy.get('.el-input input[placeholder="密码"]').should('be.visible').type(TEST_USER.password)
    // 点击登录按钮
    cy.get('.submit-btn').click()
    
    // 等待跳转到首页并验证登录成功
    cy.url().should('include', '/user/home')
    cy.get('.book-card', { timeout: 20000 }).should('be.visible')
    cy.get('.book-title', { timeout: 20000 }).should('be.visible')
  })

  const navigateToFirstBook = () => {
    // 等待书籍列表加载完成
    cy.get('.book-card', { timeout: 20000 }).should('be.visible')
    cy.get('.book-title', { timeout: 20000 }).should('be.visible')
    
    // 获取第一本书的链接并访问
    cy.get('.book-card').first().then($card => {
      // 点击查看详情按钮，但阻止新窗口打开
      const onClick = $card.find('button:contains("查看详情")').prop('onclick')
      if (onClick) {
        // 如果有 onclick 事件，提取URL
        const match = onClick.toString().match(/window\.open\(['"]([^'"]+)['"]\)/)
        if (match) {
          cy.visit(match[1])
        }
      } else {
        // 如果没有 onclick，尝试直接获取链接
        cy.wrap($card).find('button').contains('查看详情').then($btn => {
          cy.window().then(win => {
            cy.stub(win, 'open').as('windowOpen')
            cy.wrap($btn).click()
            cy.get('@windowOpen').should('be.called').then(stub => {
              const url = stub.firstCall.args[0]
              cy.visit(url)
            })
          })
        })
      }
      
      // 等待详情页内容加载
      cy.get('.book-detail', { timeout: 20000 }).should('exist')
      cy.get('.el-loading-mask').should('not.exist')
    })
  }

  it('流程1：用户登录测试', () => {
    // 验证已经在首页
    cy.url().should('include', '/user/home')
    // 验证书籍列表已加载
    cy.get('.book-card', { timeout: 20000 }).should('be.visible')
  })

  it('流程2：进入书籍详情页测试', () => {
    navigateToFirstBook()
    
    // 等待详情页内容加载
    cy.get('.el-tabs__item', { timeout: 10000 }).should('be.visible')
    
    // 切换到评论标签页
    cy.get('.el-tabs__item').contains('评论').click()
    
    // 验证评论区域可见
    cy.get('.comments-section', { timeout: 10000 }).should('be.visible')
  })

  it('流程3：发表评论测试', () => {
    navigateToFirstBook()
    
    // 等待详情页内容加载
    cy.get('.el-tabs__item', { timeout: 10000 }).should('be.visible')
    
    // 切换到评论标签页
    cy.get('.el-tabs__item').contains('评论').click()
    cy.get('.comments-section', { timeout: 10000 }).should('be.visible')

    // 点击评论按钮
    cy.get('.comments-header button').contains('评论').click()

    // 等待对话框显示
    cy.get('.el-dialog', { timeout: 10000 }).should('be.visible')
    cy.get('.el-dialog__title').should('contain', '评论')

    // 输入评论内容
    const comment = '这是一条测试评论' + Date.now()
    cy.get('.el-dialog textarea').should('be.visible').type(comment)

    // 提交评论
    cy.get('.dialog-footer button').contains('提交').click()

    // 等待评论显示在列表中
    cy.contains(comment, { timeout: 10000 }).should('be.visible')
  })

  it('流程4：评论排序功能测试', () => {
    navigateToFirstBook()
    
    // 等待详情页内容加载
    cy.get('.el-tabs__item', { timeout: 10000 }).should('be.visible')
    
    // 切换到评论标签页
    cy.get('.el-tabs__item').contains('评论').click()
    cy.get('.comments-section', { timeout: 10000 }).should('be.visible')

    // 测试最新排序
    cy.get('.sort-select').click()
    cy.get('.el-select-dropdown__item').contains('最新评论').click()
    cy.get('.comments-list', { timeout: 10000 }).should('be.visible')

    // 等待排序完成
    cy.wait(2000)

    // 测试点赞排序
    cy.get('.sort-select').click()
    cy.get('.el-select-dropdown__item').contains('点赞最多').click()
    cy.get('.comments-list', { timeout: 10000 }).should('be.visible')
  })

  it('流程5：评论点赞和取消点赞测试', () => {
    navigateToFirstBook()
    
    // 等待详情页内容加载
    cy.get('.el-tabs__item', { timeout: 10000 }).should('be.visible')
    
    // 切换到评论标签页
    cy.get('.el-tabs__item').contains('评论').click()
    cy.get('.comments-section', { timeout: 10000 }).should('be.visible')

    // 发表一条新评论
    const comment = '这是测试点赞的评论' + Date.now()
    cy.get('.comments-header button').contains('评论').click()
    cy.get('.el-dialog', { timeout: 10000 }).should('be.visible')
    cy.get('.el-dialog textarea').should('be.visible').type(comment)
    cy.get('.dialog-footer button').contains('提交').click()

    // 等待评论出现
    cy.contains(comment, { timeout: 10000 }).should('be.visible')

    // 点赞评论
    cy.contains(comment)
      .parents('.comment-item')
      .find('.comment-like-button')
      .should('be.visible')
      .as('likeButton')
      .click()

    // 等待点赞状态更新
    cy.wait(2000)

    // 验证点赞状态
    cy.get('@likeButton').should('have.class', 'liked')

    // 取消点赞
    cy.get('@likeButton').click()

    // 等待取消点赞状态更新
    cy.wait(2000)

    // 验证取消点赞状态
    cy.get('@likeButton').should('not.have.class', 'liked')
  })
}) 